package com.songshuai.webapi.permission.dao;

import com.songshuai.webapi.permission.dto.po.CampusIdCheckPojo;
import com.songshuai.webapi.permission.dto.po.RoleUserListReqPojo;
import com.songshuai.webapi.permission.dto.request.RolesReqDto;
import com.songshuai.webapi.permission.dto.response.*;
import com.songshuai.webapi.permission.model.YxRoles;
import com.songshuai.webapi.permission.dto.po.RolesReqPojo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;

public interface YxRolesMapper {

    /**
     * 校验角色名称
     * @param yxRole
     * @return
     */
    int checkRoleName(YxRoles yxRole);

    /**
     * 新增角色
     * @param yxRole
     * @return
     */
    int insert(YxRoles yxRole);

    /**
     * 查询角色信息，根据roleId.
     * @param roleId
     * @return
     */
    YxRoles selectByRoleId(Integer roleId);

    /**
     * 更新角色全部字段
     * @param yxRole
     * @return
     */
    //int updateByRoleId(YxRoles yxRole);

    /**
     * 更新角色部分字段
     * @param yxRole
     * @return
     */
    int updateSelective(YxRoles yxRole);

    /**
     * 查询角色列表
     * @param rolesReqBo
     * @return
     */
    List<RoleListResDto> queryRoleListByPage11(RolesReqPojo rolesReqBo);

    /**
     * 查询角色列表
     * @param rolesReqBo
     * @return
     */
    List<RoleListResDto> queryRoleListByPage(RolesReqPojo rolesReqBo);


    /**
     * 根据角色ID和appId，查询一级菜单
     * @param roleId 角色ID
     * @param appId 应用ID
     * @return List<NavAndFuncRoleResDto> 一级菜单列表
     */
    List<NavAndFuncRoleResDto> queryRoleParentNavList(@Param("roleId") Integer roleId, @Param("appId") Integer appId);

    /**
     * 根据角色ID和appId，查询非一级菜单以及功能
     * @param roleId 角色ID
     * @param appId 应用ID
     * @return List<NavAndFuncRoleResDto> 非一级菜单以及功能列表
     */
    List<NavAndFuncRoleResDto> queryRoleAllChildNavList(@Param("roleId") Integer roleId, @Param("appId") Integer appId);

    /**
     * 根据角色ID和appId，查询已勾中的菜单以及功能
     * @param roleId 角色ID
     * @param appId 应用ID
     * @return Set<String> 已勾中的菜单以及功能
     */
    Set<String> queryRoleCheckNavList(@Param("roleId") Integer roleId, @Param("appId") Integer appId);

    /**
     * 查询该角色关联的用户列表
     * @param roleUserListReqPojo
     * @return
     */
    List<RoleUserListResDto> queryUserList(RoleUserListReqPojo roleUserListReqPojo);


    /**
     * 查询该角色关联的用户列表,Admin用户使用此方法
     * @param roleUserListReqPojo
     * @return
     */
    List<RoleUserListResDto> queryUserListForAdmin(RoleUserListReqPojo roleUserListReqPojo);


    //查询登录用户的一级菜单（超级管理员）
    List<NavAndFuncLoginResDto> queryAdminLoginParentNavList(@Param("appId") Integer appId);

    //查询登录用户的一级菜单
    List<NavAndFuncLoginResDto> queryLoginParentNavList(@Param("loginId") Integer loginId, @Param("roleIdSet") Set<Integer> roleIdSet, @Param("appId") Integer appId);

    //查询登录用户非一级菜单以及功能
    List<NavAndFuncLoginResDto> queryAdminLoginAllChildNavList(@Param("appId") Integer appId);

    //查询登录用户非一级菜单以及功能
    List<NavAndFuncLoginResDto> queryLoginAllChildNavList(@Param("loginId") Integer loginId, @Param("roleIdSet") Set<Integer> roleIdSet,@Param("appId") Integer appId);

    //查询当前用户的菜单以及功能
    Set<String> queryUserRoleCheckNavList(@Param("userId") Integer userId,@Param("roleId") Integer roleId, @Param("appId") Integer appId);

    //根据appId查询所有一级菜单列表（超级管理员）
    List<NavigationListResDto> queryAdminParentNavigationList(@Param("appId")Integer appId);

    //根据appid查询所有一级菜单列表
    List<NavigationListResDto> queryParentNavigationList(@Param("userId")Integer userId,@Param("roleId") Integer roleId,@Param("appId")Integer appId);

    //根据appid查询所有非一级菜单列表（超级管理员）
    List<NavigationListResDto> queryAdminAllChildNavigationList(@Param("appId")Integer appId);

    //根据appid查询所有非一级菜单列表
    List<NavigationListResDto> queryAllChildNavigationList(@Param("userId")Integer userId,@Param("roleId") Integer roleId,@Param("appId")Integer appId);

    /**
     * 校验校区ID是否存在
     * @param campusIdCheckPojo
     * @return
     */
    int checkCampusId(CampusIdCheckPojo campusIdCheckPojo);


    /**
     * 删除角色
     * @param roleId 角色ID
     * @return
     */
    int deleteByRoleId(Integer roleId);

    List<YxRoles> selectRoleList(RolesReqDto record);

    List<Integer> selectNavigationIdList(@Param("roleId") Integer roleId,@Param("campusLevelType") Integer campusLevelType);


}